/*
 * @Description: 工程启动，打包总入口配置执行项
 * 该文件初始化位于package.json中的scripts中的启动以及打包命令的配置引入当中进行挂载
 * @Author: renmr
 * @Date: 2023-03-14 17:35:22
 */
let fs = require('fs')
const colors = require('colors-console')
/**
 * process.argv 获取的到的内容为npm run xxx 所对应的内容(ps：npm run dev project pro)
 *  [0] = 电脑系统中存储的node所对应的程序路径
 *  [1] = vue工程中所执行的当前指令对应的配置项文件路径
 *  [2] = 对应package.json当中scripts中的指令后所跟随的标识
 *  [3] = 所对应的项目名称为 project
 *  [4] = 为后新增的标识 pro
 *  [n] = 如果继续叠加，以此类推
 *  console.log(process.argv) argv: argv: ['C:\\Program Files\\nodejs\\node.exe','D:\\HOLLY\\POSTAL\\Project\\web\\ics-FR_multi_project\\config\\dev.js','ORDER_TARGET=DEV','project','pro']
 */
let [,,ORDER_TARGET,PROJECT_NAME,LOP_NAME] = process.argv,msg = `执行命令，项目名称不可以为空！请运行：npm run d [projectA,projectB] or npm run b npm run b [projectA,projectB] [dev,test,pre,pro]`;
const finalTarget = ORDER_TARGET && ORDER_TARGET?.split('=')[1] || '';//获取package.json当中定义的执行标识[自定义]
const ORDER_SCRIPT = finalTarget == 'DEV' ? 'npm run start' : 'npm run build';//获取执行命令
if(finalTarget == 'DEV') LOP_NAME =  LOP_NAME || 'dev';//默认启动可不携带环境标识，默认会本地开发
/**
 * 运行针对命令的校验
 * npm run dev 必须具备项目名称
 * npm run build 必须具备项目名称 && 环境标识
 */
if(!PROJECT_NAME){   
    console.log(colors(`yellow`,`> 温馨提示：${msg}`))
    return;
}
if(finalTarget == 'BUILD' && !LOP_NAME){
    console.log(colors(`yellow`,`> 温馨提示：打包请指定项目名称及环境标识：npm run b [projectA,projectB] [dev,test,pre,pro]，非指定情况下默认为生产[pro]相关内容`))
    LOP_NAME = 'pro'
}
/**
 * 检测当前执行命令中所携带的项目，在当前工程中是否已经具备，如果不具备，后续运行则会报错
 */
fs.exists(`./src/projects/${PROJECT_NAME}`,(v)=>{
    if(!v){
        console.log(colors(`yellow`,`> 温馨提示：当前命令中所指的项目：${PROJECT_NAME} 不存在`))
        return;
    } 
    /**
     * 在该文件[projectConfig.js]中写入两部分内容
     *  PROJECT_NAME = 表示当前启动 || 打包 所对应的项目名称【为后续区分多项目进行项目入口分流使用】
     *  LOP_NAME = 表示当前所运行的环境[多用于打包的情况下][dev=开发；test=测试；pre=灰度；pro=生产]【配置不同环境访问的ip端口所用】默认指向本地开发dev模式[npm run d projectName]
     */
    fs.writeFileSync('./config/engineeringConfig.js', `exports.PROJECT_NAME = '${PROJECT_NAME}';exports.LOP_NAME='${LOP_NAME}';`)// 将获取到的对应内容写入所对应的项目配置文件中
    let exec = require('child_process').execSync;
    /**
     * 通过package.json当中定义的 ORDER_TARGET 来判定所执行的命令为启动(npm run dev)还是打包(npm run build)
     * 通过截取对应的标识，进行动态判断当前所执行命令的动作指向
     */
    console.log(colors(`yellow`,`> 当前执行命令为：${ORDER_SCRIPT} ${PROJECT_NAME} ${LOP_NAME}`))
    exec(ORDER_SCRIPT, {stdio: 'inherit'});
})

